package org.example.dataStruct;

/**
 * 链表
 */
public class ListNode {
    /*
      节点值
     */
    int val;
    /*
    指向下一节点的引用
     */
    public ListNode next;

    /*
    构造函数
     */
    ListNode(int x) {
        val = x;
    }

    /**
     * 初始化链表
     */
    void Init() {
        ListNode n0 = new ListNode(98);
        ListNode n1 = new ListNode(101);
        ListNode n2 = new ListNode(203);

        n0.next = n1;
        n1.next = n2;

    }

    /**
     * 在链表的节点 n0 之后插入节点 P
     *
     * @param n0
     * @param P
     */
    void insert(ListNode n0, ListNode P) {
        ListNode n1 = n0.next;
        P.next = n1;
        n0.next = P;
    }

    /**
     * 删除链表的节点 n0 之后的首个节点
     * @param n0
     */
    void remove(ListNode n0){
     if(n0==null){
         return;
     }
     ListNode P=n0.next;
     ListNode n1=P.next;
     n0.next=n1;
    }

    /**
     * 访问链表中索引为 index 的节点
     * @param head
     * @param index
     * @return
     */
    ListNode access(ListNode head,int index){
        for(int i=0;i<index;i++){
            if(head==null){
                return  null;
            }
            head=head.next;
        }
        return  head;
    }

    /**
     *  在链表中查找值为 target 的首个节点
     * @param head
     * @param target
     * @return
     */
    int find(ListNode head,int target){
        int index=0;
        while (head!=null){
            if(head.val==target){
                return index;
            }
            head=head.next;
            index++;
        }
        return  -1;
    }
}
